/** @file         lzm_notifier.h
 *  @brief        简要说明
 *  @details      详细说明
 *  @author       lzm
 *  @date         2021-09-01 12:10:06
 *  @version      v1.1
 *  @copyright    Copyright By lizhuming, All Rights Reserved
 *  @blog         https://www.cnblogs.com/lizhuming/
 *
 **********************************************************
 *  @LOG 修改日志:
 *  v1.1 add lock
 **********************************************************
*/

#ifndef __lzm_notifier_h__
#define __lzm_notifier_h__

#include <pthread.h>

typedef void (*notify_func)(void *, int type, int value);

struct notifier
{
    struct notifier *next;
    notify_func	    func;
    void	        *arg;
};
typedef struct notifier notifier_t;

typedef struct
{
    pthread_mutex_t lock;
    notifier_t *notif;
}notifier_ctx_t;



int add_notifier(notifier_ctx_t *notifier_ctx_ptr, notify_func func, void *arg);
int remove_notifier(notifier_ctx_t *notifier_ctx_ptr,  notify_func func, void *arg);
int notify(notifier_ctx_t *notifier_ctx_ptr, int type, int val);
int notify_init(notifier_ctx_t *notifier_ctx_ptr);
int notify_exit(notifier_ctx_t *notifier_ctx_ptr);

/* 以下为demo API， 放到其它文件 */
int lzm_register_notifier(notify_func func, void *arg);
void lzm_remove_notifier(notify_func func, void *arg);
void lzm_notify(int type, int val);
void lzm_notify_init(void);
void lzm_notify_exit(void);

#endif /* Head define end*/

